package br.com.tiespec.model.Modelo;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import br.com.tiespec.model.Enum.TipoPrioridade;
import br.com.tiespec.model.Enum.TipoRisco;

@Entity
@Table(name="ti_descricao_estendida")
public class DescricaoEstendida extends EntidadeGenerica {

	private static final long serialVersionUID = -8003653680738649887L;

	@Column(length=10)
	private String codigo;
	
	@Column(length=128)
	private String nome;
	
	@Column(length=4000)
	private String sumario;

	@Enumerated
	private TipoRisco risco;
	
	@Enumerated
	private TipoPrioridade prioridade;
	
	@Column(name="pre_condicoes", length=1000)
	private String preCondicoes;
	
	@Column(name="questoes_aberto",length=1000)
	private String questoesAberto;
	
	@Column(name="pos_condicoes",length=1000)
	private String posCondicoes;
	
	@Column(name="regras_negocio",length=1000)
	private String regrasNegocio;
	
	@Column(name="casos_uso_relacionados",length=255)
	private String casosUsoRelacionados;
	
	@Column(name="variacoes_tecnologicas",length=1000)
	private String variacoesTecnologicas;
	
	@Column(name="notas_implementacao",length=1000)
	private String notasImplementacao;
	
	@OneToMany(fetch=FetchType.LAZY, mappedBy="descricaoEstendida")
	private List<Dado> dados;
	
	@OneToMany(fetch=FetchType.LAZY, mappedBy="descricaoEstendida")
	private List<Cenario> cenarios;
	
	@ManyToMany(fetch=FetchType.LAZY)
	@JoinTable(name="ti_ator_descricao", 
		joinColumns=@JoinColumn(name="descricao_id"),
		inverseJoinColumns=@JoinColumn(name="ator_id"))
	private List<Ator> atores;
	
	@ManyToOne(fetch=FetchType.LAZY, optional=false)
	@JoinColumn(name="projeto_id")
	private Projeto projeto;
	
	@Override
	public String toJson() {
		return null;
	}

	public String getSumario() {
		return sumario;
	}

	public void setSumario(String sumario) {
		this.sumario = sumario;
	}

	public String getPreCondicoes() {
		return preCondicoes;
	}

	public void setPreCondicoes(String preCondicoes) {
		this.preCondicoes = preCondicoes;
	}

	public TipoRisco getRisco() {
		return risco;
	}

	public String getRiscoEnum(){
		if (this.risco != null)
			return TipoRisco.indice(risco.ordinal());
		return "";
	}
	
	public void setRisco(TipoRisco risco) {
		this.risco = risco;
	}

	public String getPrioridadeEnum(){
		if (this.prioridade != null)
			return TipoPrioridade.indice(risco.ordinal());
		return "";
	}
	
	public String getQuestoesAberto() {
		return questoesAberto;
	}

	public void setQuestoesAberto(String questoesAberto) {
		this.questoesAberto = questoesAberto;
	}

	public String getPosCondicoes() {
		return posCondicoes;
	}

	public void setPosCondicoes(String posCondicoes) {
		this.posCondicoes = posCondicoes;
	}

	public String getRegrasNegocio() {
		return regrasNegocio;
	}

	public void setRegrasNegocio(String regrasNegocio) {
		this.regrasNegocio = regrasNegocio;
	}

	public String getCasosUsoRelacionados() {
		return casosUsoRelacionados;
	}

	public void setCasosUsoRelacionados(String casosUsoRelacionados) {
		this.casosUsoRelacionados = casosUsoRelacionados;
	}

	public String getVariacoesTecnologicas() {
		return variacoesTecnologicas;
	}

	public void setVariacoesTecnologicas(String variacoesTecnologicas) {
		this.variacoesTecnologicas = variacoesTecnologicas;
	}

	public String getNotasImplementacao() {
		return notasImplementacao;
	}

	public void setNotasImplementacao(String notasImplementacao) {
		this.notasImplementacao = notasImplementacao;
	}

	public List<Dado> getDados() {
		return dados;
	}

	public void setDados(List<Dado> dados) {
		this.dados = dados;
	}

	public List<Cenario> getCenarios() {
		return cenarios;
	}

	public void setCenarios(List<Cenario> cenarios) {
		this.cenarios = cenarios;
	}
	
	public String getCodigo() {
		return codigo;
	}
	
	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}
	
	public Projeto getProjeto() {
		return projeto;
	}
	
	public void setProjeto(Projeto projeto) {
		this.projeto = projeto;
	}
	
	public TipoPrioridade getPrioridade() {
		return prioridade;
	}
	
	public void setPrioridade(TipoPrioridade prioridade) {
		this.prioridade = prioridade;
	}
	
	public List<Ator> getAtores() {
		return atores;
	}
	
	public void setAtores(List<Ator> atores) {
		this.atores = atores;
	}
	
	public String getAtoresTexto(){
		if (this.atores == null)
			return "";
		String s = "[";
		for (Ator a:this.atores){
			s += a.getNome() + ",";
		}
		return s+"]";
	}
	
	public String getNome() {
		return nome;
	}
	
	public void setNome(String nome) {
		this.nome = nome;
	}
}